{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "5002adc3",
   "metadata": {},
   "source": [
    "# **六、阅读理解**\n",
    "\n",
    "机器阅读理解任务的定义:\n",
    "\n",
    "\n",
    "\n",
    "## 6.1 任务的来源\n",
    "\n",
    "增强机器对于数据的理解能力是人工智能发展过程中至关重要的一个环节。1950年艾伦图灵提出的图灵测试，则是将对话作为了评判人工智能能力的一个基准。在现阶段段，为了实现表现优秀的对话系统（或更简单的问答系统），机器的阅读理解能力是至关重要的。\n",
    "\n",
    "机器阅读理解属于自然语言理解（natural language understanding）的范畴，该任务可以定义为“机器通过交互从文本中抽取和构建文章语义的过程”。\n",
    "\n",
    "就像人类做阅读理解题目一样，只有在充分理解问题以及上下文的基础上，机器才能给出更准确的答案。对于机器来说，可以从以下几种任务形式来具体定义，并将其应用到实际场景中。\n",
    "\n",
    "\n",
    "\n",
    "## 6.2 任务形式\n",
    "\n",
    "对于机器阅读理解任务来说，最通用的任务形式可以定义为“给出一个query和一系列candidate context，机器需要在充分理解问题和上下文的基础上，给出最终的输出答案answer”，即，“input：query + context，output：answer”。更细化一点来说，则可以分为以下几种任务格式：\n",
    "\n",
    "1. 多项选择式阅读理解\n",
    "\n",
    "对于多项选择式阅读理解任务来说，模型需要从给出的多个答案中选出正确的答案。这就好比人类在做选择题时的场景。给出一个问题和多个选项，需要选出一个正确（唯一活不唯一的）的答案。这可以衡量人类在某阶段的学习水平，同样，这也可以用来衡量机器的学习水平。\n",
    "\n",
    "2. 抽取式阅读理解\n",
    "\n",
    "抽取式阅读理解任务的前提是，假定问题所对应的正确答案出现在给出的context中，这样，对于模型来说，则需要根据问题，给出正确答案在context中的start和end的位置，最后经过处理模型会返回一个span作为最终的答案。如果context中没有包含可能是答案的部分，则可以通过预先设置的方式，让模型给出没有答案的反馈。\n",
    "\n",
    "3. 完形填空式阅读理解\n",
    "\n",
    "类比人类在做英语考试完形填空任务的场景：给出一篇文章，从中随机选择一部分token破坏掉（就是删除并用“__”代替），人类需要根据上下文从ABCD四个选项中选择出最有可能属于原始文档的一个答案。对于机器阅读理解来说，则是需要从vocabulary中自由的选择出若干个符合上下文的token，phrase或span。\n",
    "\n",
    "4. 自由生成式阅读理解\n",
    "\n",
    "在该种任务形式下，对于模型的输出没有严格的要求，需要模型根据答案生成正确的答案，这可以通过seq2seq的范式来解决。\n",
    "\n",
    "\n",
    "\n",
    "## 6.3 机器阅读理解的发展\n",
    "\n",
    "机器阅读理解任务的发展可以追溯到十九世纪七十年代。第一个机器阅读理解系统是1977年公布的QUALM系统，该系统建立在人为手写规则的基础上。\n",
    "\n",
    "而十年之后，一个包含120个故事的阅读理解数据集在1999在公布，同时还有一个基于规则的模型Deep Read。虽然该模型已经具有了一定的精确度，但它仍旧是建立在人类专家预先制定的规则上的，而这需要耗费大量的精力和财力。\n",
    "\n",
    "从2015年开始，得益于cv领域深度学习的快速发展，机器阅读理解任务也开始建立在深度学习的基础上。就像其他的深度学习模型一样，模型不再需要人类专家手写制定的规则或通过统计学习方法选择出的特征，而仅仅依靠输入输出和精妙的模型结构设计就可以达到end to end的训练效果。这大大推进了机器阅读理解任务的发展。\n",
    "\n",
    "自2019年BERT模型推出后，机器阅读理解能力在（2019年）之前的数据集和评测指标上已经超过人类，机器阅读理解开始了新的发展。\n",
    "\n",
    "\n",
    "\n",
    "## 6.4 机器阅读理解模型\n",
    "\n",
    "### 6.4.1 模型的输入和输出\n",
    "\n",
    "从整体来看，对于机器阅读理解任务，可以看作，给定一段文本和需要回答的问题，模型需要根据对文本的理解，按照预先定义的格式（多项选择、完形填空、抽取式、生成式）返回最终的答案。\n",
    "\n",
    "拆开来看，则可以分为以下几个步骤：首先，模型将输入的文本和问题进行编码，并获得融合上下文的向量表示；之后，为了更好的理解文本和问题之间的关系，模型需要对得到的向量表示（文本和答案）进行融合；最后，模型需要根据预先定义的格式，通过特定的输出层，返回最终的答案。\n",
    "\n",
    "\n",
    "\n",
    "### 6.4.2 模型的各个层次组建介绍\n",
    "\n",
    "从整体上来看，机器阅读理解模型可以分为encoding layer，interaction layer以及output layer三个部分。下面分别对这三个部分进行介绍：\n",
    "\n",
    "1. encoding layer\n",
    "\n",
    "模型的encoding layer需要将输入的文本和问题编码为向量表示。一般来说，可以建立一个vocabulary，通过查表的方式得到embedding表示，之后，再融入诸如POS，character，context，position，dependency tree的对应表示进行数据增强。在BERT模型之后，一种获得上下文向量表示的方式就是直接使用BERT模型的输出。也可以使用BI-LSTM模型来获取句子在两个方向上的表示并进行拼接得到。\n",
    "\n",
    "2. interaction layer\n",
    "\n",
    "interaction layer的作用是融合文本信息和问题信息，简单来说就是，对于同一段文本，不同的问题所需要的文本信息并不相同，所以需要通过interaction的方式来对文本信息和问题信息进行增强。一般情况下，可以分别先对文本向量和问题向量进行self-attention处理，之后再互相进行cross- attention来达到信息融合的效果。\n",
    "\n",
    "3. output layer\n",
    "\n",
    "一般情况下，如果需要进行抽取式的阅读理解任务，则可以在最后拼接一个指针网络，给出start和end位置的概率，如果是自由生成式的网络，则可以使用seq2seq架构中的decoder模型，逐步生成答案直到生成终止符或达到长度上限。\n",
    "\n",
    "\n",
    "\n",
    "### 6.4.3 典型模型介绍\n",
    "\n",
    "这里选取fusion net模型进行介绍。\n",
    "\n",
    "先介绍两个概念：history of word和fully-aware attention\n",
    "\n",
    "对于深度学习模型来说，较浅层的网络倾向于抽取表面的信息，而较深层的网络则倾向于抽取语义信息。但是对于阅读理解模型来说，字面信息和语义信息同样重要。这里，我们将从第一层到当前层所有的输入拼接之后得到的向量称为history of word。\n",
    "\n",
    "可以发现，通过拼接向量的方法固然可以捕获所需要的各个维度的信息，但是在实际应用中，随着模型层数的加深，拼接后得到的向量的维度会大大增加，而这会带来巨大的计算负荷。\n",
    "\n",
    "接下来就引入fully-aware attention的概念，简单来说，就是将history of word作为输入，然后，使用得到的注意力权重在一个特定的层的输出上进行计算，最终得到需要的注意力向量。在实际应用中，fully-aware attention可以使用多次来捕获更多的语义信息。 \n",
    "\n",
    "\\#这里先空上\n",
    "\n",
    "\n",
    "\n",
    "## 6.5 机器阅读理解的应用\n",
    "\n",
    "大数据时代产生了巨量的文本数据，但是，通过人为分析的方式来对得到的文本信息进行处理是不现实的，这会耗费大量的人力和财力。机器阅读理解任务则可以在这方面帮助人类更高效的处理相关领域的信息。比如，在法律卷宗方面，可以使用机器阅读理解的技术来分析案件的种种因素，这可以帮助法律从业人员更方便的处理文本卷宗，将更多的精力放在对案件更本质的分析上。在说明书领域，也可以使用机器阅读理解技术来回答用户提出的问题。虽然现阶段机器阅读理解技术在实际应用中，距离期望的效果还有很大的一段差距，但是，机器阅读理解技术在当下仍可以帮助减轻一部分人员负担。比如，机器阅读理解去处理一部分相对而言比较容易回答的问题，其余的问题则留给人类去完成，这种人机协同的方式可以充分利用现有的技术来提高实际场景中的业务效率。"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
